
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': np.random.randint(1,100,4),
                   'B': pd.date_range(start='20250606',periods=4,freq='D'),
                   'C': pd.Series([1,2,3,4],index=["zhang",'li','zhou','wang'],dtype='float32'),
                   'D': np.array([3]*4,dtype='int32'),
                   'E': pd.Categorical(['test','train','test','train']),
                   'F': 'foo'
                  })

print(df)

print(df.index)    #打印列索引
print(df.columns)  #打印行索引
print(df.values)   #打印内容

print(df.describe()) #打印平均值，标准差，最大最小值等数值类数据的信息

print(df.T)  #转置

print(df.sort_index(axis=0,ascending=True))#对列索引进行排序
print(df.sort_index(axis=1,ascending=False))#对行索引进行排序

print(df.sort_values(by='A',ascending=False))#以A列数据为参考进行排序

print(df.sort_values(by=['A','B']))#按两列排序，A的优先级高于B，A有数据一样时，按B排

print(df[df.A>50])#按给定条件查询,输出A列数据大于50的行
print(df[df['E']=='test'])#输出E列数据为test的行
print('----------------------------------')
print(df[df['A'].isin(range(0,50))])#输出A列数据值在0~50之间的行

df.iat[0,2] = 3 #修改指定行指定列的数据
print(df)
df.iloc[0,2] = 9
df.loc[:,'D'] = np.random.randint(50,60,4)#修改某一列的值，冒号表示每一行
print(df)
df['C'] = -df['C']#取反
print(df)

print('---------------------------------')
print(df.replace('foo','+7')) #修改指定内容，replace不会修改原内容
print('---------------------------------')

print(df.drop('D',axis=1))#删除D列，不修改原内容
df.drop('D',axis=1,inplace=True)#inplace控制是否修改原始数据
print(df)

print(pd.isnull(df['A']))#检查A列是否是空值

df1 = df.reindex(columns=list(df.columns) + ['G'])#添加一个新列G，内容都是缺失值
print(df1)
print(pd.isnull(df1['G']))
print('--------------------------------')

print(df1.dropna(axis=1))#删除包含缺失值的列

df2 = df1['G'].fillna(5)#填充缺失值
print(df2)

print('-------------------------------------')

print(df['F'].duplicated())#检查是否重复
print('-------------------------------------')
print(df.drop_duplicates(['F']))#删除重复,默认保留第一次出现的
print('-------------------------------------')
print(df.drop_duplicates(['F'],keep='last'))#删除重复，保留最后一次出现的

#df = pd.concat([df,df2]) #合并
print(df)

print(df.groupby('E')['A'].sum()) #按E分组，对A列数据求和